package cn.line5.seam.db;

/**
 * <h1>数据库方言抽象类</h1>
 * 
 * @author Liu,Xiaojun
 * @since JDK1.6
 */
public abstract class Dialect {
	/**
	 * 将SQL语句格式化符合方言的截断SQL语句
	 * 
	 * @param sql
	 *            需要格式化的SQL
	 * @return 符合方言的截断SQL语句
	 */
	public abstract String getLimitSql(String sql);
	
	/**
	 * 获取分页时SQL语句的第一个参数
	 * 
	 * @param firstRow
	 *            起始行
	 * @param pageRows
	 *            每页行数
	 * @return 分页时SQL语句的第一个参数
	 */
	public abstract Integer getPageFirstParam(Integer firstRow, Integer pageRows);

	/**
	 * 获取分页时SQL语句的第二个参数
	 * 
	 * @param firstRow
	 *            起始行
	 * @param pageRows
	 *            每页行数
	 * @return 分页时SQL语句的第二个参数
	 */
	public abstract Integer getPageSecondParam(Integer firstRow, Integer pageRows);

	/**
	 * 将SQL语句格式化符合方言的Count聚合的SQL语句
	 * 
	 * @param sql
	 *            需要格式化的SQL
	 * @return 符合方言的Count聚合的SQL语句
	 */
	public String getCountSql(String sql) {
		return new StringBuffer("select count(*) as countNum from (")
				.append(sql).append(") as seamcount_").toString();
	}
}